// 引入路由器
import router from "@/router";

// 引入仓库
import store from "@/store";
// 添加前置守卫

//解决第一个问题:token
//登录、注册、首页、搜素、详情、购物车、加入购物车成功
//未登录:顶部七个路由可以随便进
//登录:登录、注册不能在访问，其余五个可以进入

//解决第二个问题:用户信息问题
router.beforeEach(async (to, from, next) => {
  // 获取仓库里面token
  let hasToken = store.state.user.token;
  //  获取仓库里面用户信息
  let nickName = store.state.user.nickName;
  // 决定用户登陆了
  if (hasToken) {
    //  如果登陆成功,,不能去登录注册页面
    if (to.path == "/loagin" || to.path == "/register") {
      next("/home");
    } else {
      //登录成功以后,判断有没有用户信息
      //如果用户信息放行，如果没有用户信息，通知vuex发请求，获取用户信息以后再放行
      if (nickName) {
        // 如果有用户信息放行
        next();          
      } else {
        try {
          //没有用户信息发请求获取用户信息以后再放行
          await store.dispatch("getUserInfo");
          next();
        } catch (error) {
          //用户登录(token),发请求获取用户信息失败[token过期了!!!]
          //先清空前端项目本地数据
          await store.dispatch("logout");
          // 让用户再次登录,获取新的token
          next("/login");
        }                
      }
    }
  } else {
    //决定用户未登录
    next();
  }
});
